Будем дальше мучать наш проект. Сохранение как известно производится в функции Serialize класса документа. На данный момент она у нас такая.
void CTestOleContCntrItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
// Call base class first to read in COleClientItem data.
// Since this sets up the m_pDocument pointer returned from
// CTestOleContCntrItem::GetDocument, it is a good idea to call
// the base class Serialize first.
COleClientItem::Serialize(ar);
// now store/retrieve data specific to CTestOleContCntrItem
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
Как видите не сохраняется рамка, в которой он находится. Это совсем не
хорошо. Давайте изменим наш метод. Я хочу, чтобы сохранялось как содержимое
объекта так и его местоположение. void CTestOleContCntrItem::Serialize(CArchive& ar)
{
ASSERT_VALID(this);
COleClientItem::Serialize(ar);
if (ar.IsStoring())
{
ar << m_Rect;
}
else
{
ar >> m_Rect;
}
}
Ну что ? Попробуем ? Запускайте проект. Вставляем лист Excel. Схватите за рамку и поставьте его в центре. Введите две цифры и сложите их по формуле. Сохраните файл. Остановите работу программы, запустите снова и прочитайте файл. Вы увидите таблицу на том же месте. Только активизировать мы её не сможем, так как не умеем обработывать двойные щелчки мышью и так далее.